home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.tree;
-
- import java.io.PrintStream;
- import java.util.Hashtable;
- import sun.tools.asm.Assembler;
- import sun.tools.asm.LocalVariable;
- import sun.tools.java.AmbiguousClass;
- import sun.tools.java.AmbiguousField;
- import sun.tools.java.ClassDefinition;
- import sun.tools.java.ClassNotFound;
- import sun.tools.java.CompilerError;
- import sun.tools.java.Constants;
- import sun.tools.java.Environment;
- import sun.tools.java.FieldDefinition;
- import sun.tools.java.Identifier;
- import sun.tools.java.Type;
-
- public class IdentifierExpression extends Expression {
- // $FF: renamed from: id sun.tools.java.Identifier
- Identifier field_0;
- FieldDefinition field;
-
- public IdentifierExpression(int var1, Identifier var2) {
- super(60, var1, Type.tError);
- this.field_0 = var2;
- }
-
- public boolean equals(Identifier var1) {
- return this.field_0.equals(var1);
- }
-
- private long assign(Environment var1, long var2) {
- if (this.field.isLocal()) {
- LocalField var4 = (LocalField)this.field;
- var2 |= 1L << var4.number;
- ++var4.writecount;
- }
-
- if (this.field.isFinal()) {
- var1.error(super.where, "assign.to.final", this.field_0);
- }
-
- return var2;
- }
-
- private long get(Environment var1, long var2) {
- if (this.field.isLocal()) {
- LocalField var4 = (LocalField)this.field;
- if ((var2 & 1L << var4.number) == 0L) {
- var1.error(super.where, "var.not.initialized", this.field_0);
- var2 |= 1L << var4.number;
- }
-
- ++var4.readcount;
- } else if (!this.field.isStatic() && (var2 & 1L) == 0L) {
- var1.error(super.where, "access.inst.before.super", this.field_0);
- }
-
- return var2;
- }
-
- boolean bind(Environment var1, Context var2) {
- try {
- this.field = var2.getField(var1, this.field_0);
- if (this.field == null) {
- var1.error(super.where, "undef.var", this.field_0);
- return false;
- }
-
- super.type = this.field.getType();
- if (!var2.field.getClassDefinition().canAccess(var1, this.field)) {
- var1.error(super.where, "no.field.access", this.field_0, this.field.getClassDeclaration(), var2.field.getClassDeclaration());
- return false;
- }
-
- if (!var2.field.canAccess(var1, this.field)) {
- var1.error(super.where, "no.static.field.access", this.field_0, this.field.getClassDeclaration());
- return false;
- }
-
- if (!var2.field.canReach(var1, this.field)) {
- var1.error(super.where, "forward.ref", this.field_0, this.field.getClassDeclaration());
- return false;
- }
-
- return true;
- } catch (ClassNotFound var4) {
- var1.error(super.where, "class.not.found", var4.name, var2.field);
- } catch (AmbiguousField var5) {
- var1.error(super.where, "ambig.field", this.field_0, var5.field1.getClassDeclaration(), var5.field2.getClassDeclaration());
- }
-
- return false;
- }
-
- public long checkValue(Environment var1, Context var2, long var3, Hashtable var5) {
- if (this.bind(var1, var2)) {
- var3 = this.get(var1, var3);
- var2.field.getClassDefinition().addDependency(this.field.getClassDeclaration());
- }
-
- return var3;
- }
-
- public long checkLHS(Environment var1, Context var2, long var3, Hashtable var5) {
- return this.bind(var1, var2) ? this.assign(var1, var3) : var3;
- }
-
- public long checkAssignOp(Environment var1, Context var2, long var3, Hashtable var5, Expression var6) {
- return this.bind(var1, var2) ? this.assign(var1, this.get(var1, var3)) : var3;
- }
-
- Type toType(Environment var1, Context var2) {
- try {
- return Type.tClass(var2.field.resolve(var1, this.field_0));
- } catch (AmbiguousClass var6) {
- var1.error(super.where, "ambig.class", var6.name1, var6.name2);
- } catch (ClassNotFound var7) {
- }
-
- ClassDefinition var3 = var2.field.getClassDefinition();
- Identifier var4 = var3.getName().getQualifier();
- Identifier var5 = var4 != null && var4 != Constants.idNull ? Identifier.lookup(var4, this.field_0) : this.field_0;
- return Type.tClass(var5);
- }
-
- public Expression inline(Environment var1, Context var2) {
- return null;
- }
-
- public Expression inlineValue(Environment var1, Context var2) {
- if (this.field == null) {
- return this;
- } else {
- try {
- if (this.field.isLocal()) {
- if (this.field.isFinal()) {
- Expression var3 = (Expression)this.field.getValue(var1);
- return (Expression)(var3 != null ? var3 : this);
- } else {
- return this;
- }
- } else {
- return (new FieldExpression(super.where, var2, this.field)).inlineValue(var1, var2);
- }
- } catch (ClassNotFound var4) {
- throw new CompilerError(var4);
- }
- }
- }
-
- public Expression inlineLHS(Environment var1, Context var2) {
- return (Expression)(this.field.isLocal() ? this : (new FieldExpression(super.where, var2, this.field)).inlineValue(var1, var2));
- }
-
- int codeLValue(Environment var1, Context var2, Assembler var3) {
- return 0;
- }
-
- void codeLoad(Environment var1, Context var2, Assembler var3) {
- var3.add(super.where, 21 + super.type.getTypeCodeOffset(), new Integer(((LocalField)this.field).number));
- }
-
- void codeStore(Environment var1, Context var2, Assembler var3) {
- LocalField var4 = (LocalField)this.field;
- var3.add(super.where, 54 + super.type.getTypeCodeOffset(), new LocalVariable(var4, var4.number));
- }
-
- public void codeValue(Environment var1, Context var2, Assembler var3) {
- this.codeLValue(var1, var2, var3);
- this.codeLoad(var1, var2, var3);
- }
-
- public void print(PrintStream var1) {
- var1.print(this.field_0 + "#" + (this.field != null ? this.field.hashCode() : 0));
- }
- }
-